import { createStore } from "vuex";
import getters from "./getters";
import actions from "./actions";
import mutations from "./mutations";
const modulesFiles = import.meta.glob("./modules/*.ts", { eager: false });

const getModules = (files: any) => {
    let res:{[key:string]:any} = {}
    Object.keys(files).forEach((key) => {
        let modules = files[key]
        let k = key.replace('./modules/', '').replace('.ts','')
        res[k] = modules
    });
    return res
};

const Modules = getModules(modulesFiles);
console.log(Modules)
export default createStore({
  // 各个业务模块的仓库modules
  /* 
        默认情况下，模块内部的 action 和 mutation 仍然是注册在全局命名空间的——
        这样使得多个模块能够对同一个 action 或 mutation 作出响应。Getter 同样也默认注册在全局命名空间，
        但是目前这并非出于功能上的目的（仅仅是维持现状来避免非兼容性变更）。
        必须注意，不要在不同的、无命名空间的模块中定义两个相同的 getter 从而导致错误。
        如果希望你的模块具有更高的封装度和复用性，
        你可以通过添加 namespaced: true 的方式使其成为带命名空间的模块。
        当模块被注册后，它的所有 getter、action 及 mutation 都会自动根据模块注册的路径调整命名。
    */
  modules: {
    ...Modules,
  },
  // 全局状态
  state: {
    // 国家列表
    countryList: [],
    // 资质审查对象
    qualityCheckForm: {},
    qualityCheckQuickForm: {},
    isProd: import.meta.env.MODE === "production",
  },
  mutations,
  actions,
  getters,
});
